package org.goj.practice.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.goj.common.entity.practice.Problem;
import org.goj.practice.dto.SimpleContestProblemDTO;
import org.goj.practice.vo.ProblemAdminVO;
import org.goj.practice.vo.ProblemVO;
import org.goj.practice.vo.SimpleProblemVO;

import java.util.List;

/**
 * <p>
 * 题目 Mapper 接口
 * </p>
 *
 * @author CK
 * @since 2020-12-02
 */
public interface ProblemMapper extends BaseMapper<Problem> {

    /**
     * 条件分页查询题目
     *
     * @param page         分页
     * @param queryWrapper 条件
     * @return Page<ProblemVO>
     * @author CK
     * @date 2020/12/9 10:41
     */
    Page<ProblemVO> getProblemConditionPage(Page<ProblemVO> page, @Param(Constants.WRAPPER) QueryWrapper<ProblemVO> queryWrapper);

    /**
     * 根据题目ID更新submit和solved和ratio
     *
     * @param problemId 题目ID
     * @return int
     * @author CK
     * @date 2021/3/22 14:32
     */
    int updateSubmitProblem(Integer problemId);

    /**
     * 管理员条件分页查询题目
     *
     * @param page         分页
     * @param queryWrapper 条件
     * @return Page<ProblemAdminVO>
     * @author CK
     * @date 2021/3/24 10:55
     */
    Page<ProblemAdminVO> getProblemAdminPage(Page<ProblemAdminVO> page, @Param(Constants.WRAPPER) QueryWrapper<ProblemAdminVO> queryWrapper);

    /**
     * 管理员添加题目
     *
     * @param problem 题目实体类
     * @return int
     * @author CK
     * @date 2021/3/25 18:48
     */
    int insertProblem(Problem problem);

    /**
     * 管理员导入题目
     *
     * @param problem 题目集合
     * @return int
     * @author CK
     * @date 2021/3/31 21:07
     */
    int insertProblemBatch(List<Problem> problem);

    /**
     * 进入题目界面时查询竞赛列表
     *
     * @param contestId 竞赛ID
     * @return List<SimpleContestProblemDTO>
     * @author CK
     * @date 2021/4/24 20:51
     */
    List<SimpleContestProblemDTO> listSimpleContestProblemDTO(@Param(value = "contestId") Integer contestId);

    /**
     * 查询简要题目数据
     *
     * @param page         分页
     * @param queryWrapper 条件
     * @return Page<SimpleProblemVO>
     * @author CK
     * @date 2021/5/11 16:40
     */
    Page<SimpleProblemVO> pageSimpleProblem(Page<SimpleProblemVO> page, @Param(Constants.WRAPPER) QueryWrapper<SimpleProblemVO> queryWrapper);
}
